package Library;

//无数据库版本

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/*1.Book类定义了书的属性(bookname,type,isBorrow, author, price,username)
并且提供空参构造器、有参构造器、get和set以及toString方法。

2.Account类定义了普通用户属性(name,password)提供空参、无参构造器和get、
set方法。

3.Manager类定义了管理员属性,设计采用单例模式,因为只有一位管理员提供get、set
方法

4.Account_Service类负责提供账号注册、账号登录、锁定账号的方法，对输入账号
或密码错误次数达到三次的用户进行锁定。

5.Book_Service类主要负责为普通用户提供列出书籍信息，查找书籍、借阅书籍、
归还书籍的功能。

6.Manager_Service类主要负责为管理员提供、查找图书、收录图书、删除图书、
修改图书、解锁用户、锁定用户的功能

7.Utility类主要负责为从键盘录入数据提供一些静态方法、以及读写文件的方法。

8.MianProgram是主程序、负责调用其他类已经写好的方法。
*/
import java.util.ArrayList;
/*在我调用账号注册时，我想通过反射来获取类中的数据，但是treemap是我传进去的，所以无法访问，期间用到了get方法来获取变量的值
我想看treemap有没有存到东西，用反射,但是是传进去的，反射无法获取该变量
 反射得到类内容
Class<Account_Service> c = Account_Service.class;
Constructor<Account_Service> constructor = c.getConstructor();
Account_Service newInstance = constructor.newInstance();
 方法
Method[] methods = c.getMethods();
for(Method method : methods) {
	System.out.println(method);
}
 参数
Field[] fields = c.getFields();
for (Field f : fields) {
	System.out.println(f);
*/
import java.util.Scanner;
import java.util.TreeMap;

public class MainProgram {

	// 储存客户和商家信息

	public static final TreeMap<String, String> treemap_acc_pass = new TreeMap<String, String>();
	public static final ArrayList<register> registerList = new ArrayList<register>();
	public static int identify = 0;// 身份，0是用户

	// 储存书本的信息
	public static final ArrayList<Book> bookList = new ArrayList<Book>();

	public static void main(String[] args)
			throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException,
			IllegalArgumentException, InvocationTargetException, NoSuchFieldException, InterruptedException {
		while (true) {
			Home();
			if (identify == 0) {
				customerOperate();
			} else if (identify == 1) {
				businessOperate();
			}
		}
	}

	// 首页
	public static void Home() throws InterruptedException {
		Scanner input = new Scanner(System.in);
		while (true) {
			System.out.println("=========电影首页=========\r\n" + "1、登录\r\n" + "2、用户注册\r\n" + "3、商家注册\r\n" + "4、退出系统");
			int choise = input.nextInt();
			if (choise == 2) {
				identify = 0;
				register r0 = new register(identify);
				r0.RegisterAnAccount(registerList);
				registerList.add(r0);
//				System.out.println(registerList.get(0).getIdentify());
//				System.out.println(registerList.get(0).getAccount());
			} else if (choise == 1) {
				if (registerList.isEmpty()) {
					System.out.println("目前系统没有账户信息，请先注册账户在登陆");
				} else {
					// 获取是顾客还是商家，返回值类型int，在进行下一步动作???
					Account_Service as = new Account_Service();
					identify = as.AccountLogin(registerList);
					break;
				}
			} else if (choise == 3) {
				identify = 1;
				register r1 = new register(identify);
				r1.RegisterAnAccount(registerList);
				registerList.add(r1);
//				System.out.println(registerList.get(0).getIdentify());
			} else if (choise == 4) {
				System.exit(0);
			} else {
				System.out.println("您输入的指令有误，请重新输入");
			}
		}
	}

	public static void customerOperate() {
		Scanner input = new Scanner(System.in);
		
		customerOperateClass cos = new customerOperateClass();
		/*
		 * public void manu(){ System.out.println("_________________");
		 * System.out.println("hello,"+name+"~"); System.out.println("1.查找图书！");
		 * System.out.println("2.借阅图书！"); System.out.println("3.归还图书！");
		 * System.out.println("0.退出系统！"); }
		 */
		while (true) {
			System.out.println("=========顾客用户选择=========");
			System.out.println("1、查找图书");
			System.out.println("2、借阅图书");
			System.out.println("3、归还图书");
			System.out.println("0、退出登录");
			int choise = input.nextInt();
			if (choise == 0) {
				System.out.println("退出登录");
				break;
			}else if(choise == 1) {
				//商家里面有查找方法
				new businessOperateClass().searchBooks(bookList);
			}else if(choise == 2) {
				cos.borrowBooks(bookList);
			}else if(choise == 3) {
				cos.returnBooks(bookList);
			}else if(choise == 4) {
				System.out.println("退出登陆");
				break;
			}
		}
	}

	public static void businessOperate() {
		Scanner input = new Scanner(System.in);

		// new一个businessOperateClass，下面的就可以统一用这个了
		businessOperateClass boc = new businessOperateClass();
		/*
		 * public void menu(){
		 * System.out.println("____________________________________");
		 * System.out.println("1.查找图书"); System.out.println("2.新增图书");
		 * System.out.println("3.删除图书"); System.out.println("4.显示图书");
		 * System.out.println("0.退出系统"); }
		 */
		while (true) {
			System.out.println("=========商家用户选择=========");
			System.out.println("1.查找图书");
			System.out.println("2.新增图书");
			System.out.println("3.删除图书");
			System.out.println("4.显示图书");
			System.out.println("0.退出登录");
			System.out.println("请输入您的选择：");
			int choise = input.nextInt();
			if (choise == 2) {
				boc.addNewBooks(bookList);
			} else if (choise == 1) {
				boc.searchBooks(bookList);
			} else if (choise == 3) {
				boc.deleteBooks(bookList);
			} else if (choise == 4) {
				boc.showAllBooks(bookList);
			} else if (choise == 0) {
				System.out.println("退出登陆");
				break;
			} else {
				System.out.println("您输入的命令有误，请重新输入：");
				choise = input.nextInt();
			}
		}
	}
}
